package com.ayu.shortlink.project.service;

import com.ayu.shortlink.project.dao.entiry.ShortLinkDO;
import com.ayu.shortlink.project.dto.biz.ShortLinkStatsRecordDTO;
import com.ayu.shortlink.project.dto.req.ShortLinkBatchCreateReqDTO;
import com.ayu.shortlink.project.dto.req.ShortLinkCreateReqDTO;
import com.ayu.shortlink.project.dto.req.ShortLinkPageReqDTO;
import com.ayu.shortlink.project.dto.req.ShortLinkUpdateReqDTO;
import com.ayu.shortlink.project.dto.resp.ShortLinkBatchCreateRespDTO;
import com.ayu.shortlink.project.dto.resp.ShortLinkCreateRespDTO;
import com.ayu.shortlink.project.dto.resp.ShortLinkGroupCountRespDTO;
import com.ayu.shortlink.project.dto.resp.ShortLinkPageRespDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;

import java.util.List;

public interface ShortLinkService extends IService<ShortLinkDO> {

    /**
     * 短链接创建 V1
     * @param requestParam 短链接创建请求参数
     * @return 短链接创建返回结果
     */
    ShortLinkCreateRespDTO create(ShortLinkCreateReqDTO requestParam);

    /**
     * 短链接创建 V2
     * @param requestParam 短链接创建请求参数
     * @return 短链接创建返回结果
     */
    ShortLinkCreateRespDTO create2(ShortLinkCreateReqDTO requestParam);

    /**
     * 批量创建短链接
     * @param requestParam 短链接批量创建请求对象
     * @return 短链接批量创建响应对象
     */
    ShortLinkBatchCreateRespDTO batchCreat(ShortLinkBatchCreateReqDTO requestParam);

    /**
     * 分页查询短链接
     * @param requestParam 分页查询短链接请求参数
     * @return 分页查询短链接返回结果
     */
    IPage<ShortLinkPageRespDTO> getPage(ShortLinkPageReqDTO requestParam);

    /**
     * 查询分组内短链接数量
     * @param requestParam 分组标识集合
     * @return 查询分组内的数量响应
     */
    List<ShortLinkGroupCountRespDTO> listGroupShortLinkCount(List<String> requestParam);

    /**
     * 更新短链接信息
     * @param requestParam 更新短链接信息请求参数
     */
    void updateShortLink(ShortLinkUpdateReqDTO requestParam);

    /**
     * 短链接重定向跳转
     * @param shortUri 短链接后缀
     * @param request Http 请求
     * @param response Http 响应
     */
    void restoreUrl(String shortUri, ServletRequest request, ServletResponse response);

    /**
     * 短链接跳转重定向 v2
     * @param shortUri 短链接后缀
     * @param request Http 请求
     * @param response Http 响应
     */
    void restoreUrl2(String shortUri, ServletRequest request, ServletResponse response);

    /**
     * 短链接统计
     *
     * @param shortLinkStatsRecord 短链接统计实体参数
     */
    void shortLinkStats(ShortLinkStatsRecordDTO shortLinkStatsRecord);

    /**
     * 短链接跳转重定向 v3
     * @param shortUri 短链接后缀
     * @param request Http 请求
     * @param response Http 响应
     */
    void restoreUrl3(String shortUri, ServletRequest request, ServletResponse response);

    /**
     * 短链接跳转重定向 v4
     * @param shortUri 短链接后缀
     * @param request Http 请求
     * @param response Http 响应
     */
    void restoreUrl4(String shortUri, ServletRequest request, ServletResponse response);
}
